package com.tms.basic.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tms.basic.pojo.domain.Vehicle;
import com.tms.basic.pojo.req.VehicleQueryReq;
import com.tms.basic.pojo.vo.VehicleVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 车辆信息Mapper接口
 *
 * @author TMS
 * @since 2024-01-01
 */
@Mapper
public interface VehicleMapper extends BaseMapper<Vehicle> {

    /**
     * 分页查询车辆信息
     *
     * @param page 分页对象
     * @param req  查询条件
     * @return 车辆信息分页结果
     */
    IPage<VehicleVO> selectVehiclePage(Page<VehicleVO> page, @Param("req") VehicleQueryReq req);

    /**
     * 根据条件查询车辆信息列表
     *
     * @param req 查询条件
     * @return 车辆信息列表
     */
    List<VehicleVO> selectVehicleList(@Param("req") VehicleQueryReq req);

    /**
     * 根据ID查询车辆详细信息
     *
     * @param id 车辆ID
     * @return 车辆详细信息
     */
    VehicleVO selectVehicleById(@Param("id") Long id);

    /**
     * 根据车牌号查询车辆信息
     *
     * @param licensePlate 车牌号
     * @return 车辆信息
     */
    VehicleVO selectVehicleByLicensePlate(@Param("licensePlate") String licensePlate);

    /**
     * 查询即将到期的车辆（保险或年检30天内到期）
     *
     * @param days 提前天数
     * @return 即将到期的车辆列表
     */
    List<VehicleVO> selectExpiringVehicles(@Param("days") Integer days);

    /**
     * 根据状态统计车辆数量
     *
     * @param organizationId 机构ID
     * @return 车辆状态统计结果
     */
    List<java.util.Map<String, Object>> countVehicleByStatus(@Param("organizationId") Long organizationId);
} 